使用 Segmenter
本教程将带你完成利用 OV20i 的 AI 驱动分割能力来进行完整的分割检测。你将学习如何通过教摄像头识别并逐像素测量铅笔痕迹、划痕或其他缺陷等特征来进行检测与分析。
OV10i 不具备分割能力。
您将学习到的内容:
- 如何从头到尾设置一个分割配方
- 如何训练 AI 模型以识别特定特征
- 如何基于分割结果配置通过/不通过逻辑
- 如何为生产使用优化分割性能
实际应用: 本教程以铅笔标记检测为例,但相同原理同样适用于检测划痕、裂纹、污染或任何其他可通过视觉区分的特征。
前提条件
- OV20i 摄像系统已设置并连接
- 具备要检测的特征的样本部件(如带铅笔标记的纸张)
- 对 AI 训练概念的基本理解
- 具备访问配方编辑器和 Node-RED 功能的权限
教程概览
我们将构建的内容: 一个能够检测纸张上铅笔标记的分割模型,并基于检测到的标记数量来判定通过/不通过。
所需时间: 45-60 分钟(含训练时间)
学习技能: AI 模型训练、分割标注、通过/不通过逻辑配置
步骤 1:创建一个新的分割配方
1.1 新建配方
- 在“全部配方”页面,点击右上角的“+ 新建”
- 将出现“添加新配方”对话框
- 为你的配方输入一个描述性名称(例如 “Pencil_Mark_Detection”)
- 从“配方类型”下拉菜单中选择“Segmentation”(分割)
- 点击“OK”创建新配方
为何选择分割? 与识别整个对象的分类不同,分割在图像中查找并测量特定特征,因此非常适合缺陷检测、污染分析或测量覆盖区域。

1.2 启用并打开配方编辑器
- 新建的配方将在“全部配方”页面显示,状态为“未激活”
- 在配方右侧选择“激活”
- 点击“激活并进入编辑器”以确认并启动配方编辑器
检查点: 您应在面包屑导航中看到带有分割配方名称的 Recipe Editor 界面。
步骤 2:配置相机成像
2.1 进入成像设置
- 在配方编辑器中,单击左下角的“配置成像”
- 这将打开成像配置页面,您将在此优化相机设置

2.2 优化聚焦设置
- 将带有铅笔标记的样本纸放入相机视野中
- 使用“焦点”滑块实现铅笔标记的清晰聚焦
- 也可以手动输入焦点数值以提高精度
- 如有可用,请使用 Focus View 查看边缘高亮和焦点分数
聚焦要点:
- 聚焦在将出现缺陷的表面
- 确保铅笔标记清晰且轮廓分明
- 更高的焦点分数表示更好的聚焦质量
2.3 配置曝光设置
- 调整 Exposure 滑块以实现合适的亮度
- 铅笔痕迹应在纸张上清晰可见,避免对纸张过曝
- 以自动设置开始,必要时进行微调
- 观察实时预览以实现实时变化
Exposure Guidelines:
- 铅笔痕迹应与纸张形成良好对比
- 避免过曝导致细微痕迹被冲淡
- 确保整个检测区域的照明保持一致
2.4 Set Up LED Lighting
- 选择适用于您的应用的 LED Light Pattern
- 对于铅笔痕迹,通常均匀照明效果最佳
- 调整 LED Light Intensity 以最小化阴影和眩光
- 如有反射问题,请测试不同的照明模式
2.5 Adjust Gamma and Contrast
- 细调 Gamma 以增强痕迹与背景之间的对比度
- 较高的 gamma 可以使细微的铅笔痕迹更清晰
- 较低的 gamma 可以降低干净区域的噪声
- 平衡 gamma 以在缺陷可见性和背景清晰度之间实现优化
2.6 Save Imaging Settings
- 一旦所有设置优化完成,点击 "Save Imaging Settings"
- 您的相机配置现已保存到此配方
- 实时预览应显示清晰、对比度良好的图像
检查点: 相机应输出清晰的图像,使铅笔痕迹与纸张背景易于区分。
第 3 步:配置模板和对齐
3.1 导航到 Template Image and Alignment
- 点击面包屑菜单中的 Recipe Name 以返回 Recipe Editor
- 从菜单中选择 "Template Image and Alignment"
3.2 本教程跳过对齐器
- 由于我们在整张纸上检测特征,请点击 "Skip Aligner"
- 这将禁用基于位置的对齐,使用整张图像
- 点击 "Save" 以应用更改
何时使用对齐器: 启用对齐器,当您需要在可能移动或旋转的工件的特定位置检测特征时。对于像铅笔痕迹这样的整张纸检测,跳过对齐器通常是合适的。

第 4 步:设置检测区域
4.1 导航到 Inspection Setup
- 返回 Recipe Editor 并选择 "Inspection Setup"
- 这里将定义要分析的图像区域
4.2 配置 ROI(Region of Interest,ROI)
- 您将看到相机视野的预览
- 拖动 ROI 框的角点 以调整其大小和位置
- 对于铅笔痕迹检测,通常覆盖整张纸区域
- 确保 ROI 覆盖铅笔痕迹可能出现的所有区域
ROI 最佳实践:
- 包括可能出现缺陷的所有区域
- 排除边缘、背景等不应分析的区域
- 使 ROI 足够大以捕捉部件定位的变化
- 避免包含文本、标志或其他预期标记
4.3 保存 ROI 配置
- 一旦 ROI 定位正确,点击 "Save"
- 该检测区域现已为您的分割模型定义
第 5 步:标注并训练你的模型
5.1 前往 标注与训练
- 返回到 配方编辑器,并选择 "Label and Train"
- 这里你将教 AI 如何识别铅笔标记的外观

5.2 配置 Inspection Class
- Under Inspection Types, click "Edit"
- 将该类别重命名为 "Pencil Mark"(或您特定的缺陷类型)
- 为可视化检测到的标记选择一种显著的 color
- 点击 "Save" 以应用更改
5.3 捕获训练图像
- 至少拍摄 10 张包含不同铅笔标记的纸张图像
- 变换训练示例:
- 不同尺寸和形状的铅笔标记
- 浅色与深色标记
- 纸张上的不同位置
- 不同密度的标记
训练图像提示:
- 包含微小与明显的标记
- 捕捉你将遇到的各种照明条件
- 每张图像中包含无标记的干净区域
- 确保图像能代表生产条件
5.4 标注训练图像
- 对每张训练图像,使用 Brush 工具 在铅笔标记上描画
- 仅绘制铅笔标记 - 避免标记纸张或其他特征
- 标注时要精准但全面
- 完成每张图像后,点击 "Save Annotations"
标注最佳实践:
- 在将何物标注为 "pencil marks" 时保持一致
- 包括完整标记,而不仅是部分
- 不要标注诸如文本或商标之类的预期标记
- 使用稳定、细致的笔触以获得准确边界
5.5 审查标注
- 再次核对所有标注的图像 以确保准确性
- 查找遗漏的标记或错误标注的区域
- 对需要更正的图像重新标注
- 高质量的标注可提升模型性能
第 6 步:训练 Segmentation Model
6.1 开始训练过程
- 一旦你对至少 10 张图像完成标注,请点击 "Return to Live"
- 点击 "Train Segmentation Model"
- 输入训练的 迭代次数
迭代指南:
- 初始训练从 100-200 次迭代开始
- 更多迭代通常会提升准确性,但需要更长时间
- 监控训练进度并按需进行调整
- 在准确性需求与训练时间之间取得平衡

6.2 监控训练进度
- 点击 "Start Training" 以开始该过程
- 将显示一个训练进度对话框,显示:
- 当前迭代次数
- 训练准确率百分比
- 预计剩余时间
6.3 训练控制选项
在训练期间,您可以:
- Abort Training - 如需进行更改,请中止训练
- Finish Training Early - 当准确性达到足够时停止
- Monitor Progress - 观察迭代中的准确性提升
训练提示:
- 目标准确性达到时,训练将自动结束
- 更高的准确性百分比表示更好的模型性能
- 如果准确性趋于稳定,您可能需要更多训练数据
6.4 评估训练结果
- 训练完成后,查看最终准确性
- 点击 "Live Preview" 以查看实时分割结果
- 使用新的样本进行测试以验证模型性能
成功指标:
- 铅笔标记以您选择的颜色高亮显示
- 干净区域保持未标记
- 检测在不同标记类型之间保持一致
- 模型对新的、未见过的样本有良好响应
第 7 步:配置通过/失败逻辑
7.1 导航至 IO Block
- 返回到配方编辑器并点击 "Configure I/O" 或从面包屑菜单中选择 "IO Block"
7.2 设置 Node-RED 流
- Delete the existing Classification Block Logic 节点
- From the left palette, drag in:
- All Block Outputs 节点(若尚未存在)
- Function 节点
- Final Pass/Fail 节点
- 连接节点:All Block Outputs → Function → Final Pass/Fail

7.3 配置通过/失败逻辑
双击 Function 节点并从以下逻辑示例中选择一个:
Option 1: Pass if No Defects Detected
// Pass if no pencil marks are found
const allBlobs = msg.payload.segmentation.blobs;
const results = allBlobs.length <1;
msg.payload = results;
return msg;
Option 2: Pass if All Marks Are Small
// Pass if all marks are smaller than threshold
const threshold = 500; // pixels
const allBlobs = msg.payload.segmentation.blobs;
const allUnderThreshold = allBlobs.every(blob => blob.pixel_count < threshold);
msg.payload = allUnderThreshold;
return msg;
Option 3: Pass if Total Coverage Is Low
// Pass if total marked area is below threshold
const threshold = 5000; // total pixels
const allBlobs = msg.payload.segmentation.blobs;
const totalArea = allBlobs.reduce((sum, blob) => sum + blob.pixel_count, 0);
msg.payload = totalArea < threshold;
return msg;
7.4 部署并测试逻辑
- 点击 "Done" 保存函数
- 点击 "Deploy" 启用逻辑
- 导航到 HMI 以测试您的通过/失败逻辑
测试您的逻辑:
- 使用干净样本进行测试(应通过)
- 使用轻微标记的样本进行测试(应按您的标准通过/不通过)
- 使用严重标记的样本进行测试(应失败)
- 验证结果是否符合预期
第 8 步:优化与验证
8.1 使用生产样本进行测试
- 将多组测试样本投入到检测中
- 验证检测准确性是否符合您的要求
- 验证通过/失败逻辑是否正确工作
- 记录任何问题或边界情况
8.2 细调模型性能
如果检测不一致:
- 添加包含多样示例的训练图像
- 提高标注质量与一致性
- 调整成像设置以获得更好对比度
- 使用更多迭代进行重新训练
如果通过/失败逻辑需要调整:
- 在 Node-RED 函数中修改阈值
- 测试不同的逻辑方法
- 考虑用于复杂决策的多重标准
- 使用生产要求进行验证
8.3 生产验证
- 在实际条件下使用真实生产零件进行测试
- 与质检团队共同验证,确保标准符合要求
- 记录性能指标,如检测准确性和误报率
- 建立监控,以随时间跟踪性能
步骤 9:了解分割结果
9.1 分割数据结构
您的分割结果包括:
- Blobs:单个检测到的特征(铅笔痕迹)
- Pixel Count:每个检测到的特征的像素计数
- Location Data:特征出现的位置
- Confidence Scores:对每次检测的置信度
9.2 使用分割数据
您可以基于以下内容创建复杂的通过/不通过逻辑:
- Number of defects:检测到的缺陷数量
- Size of individual defects(像素计数)
- Total defect area(所有像素计数之和)
- Defect location(缺陷出现的位置)
- Defect shape characteristics(如需要用于高级应用)
成功!您的分割模型已完成
您的 OV20i 分割检测现在可以:
✅ 自动检测图像中的铅笔痕迹(或您指定的特征)
✅ 测量检测到的特征的大小和数量
✅ 根据您的特定标准进行通过/不通过的决策
✅ 提供关于每个检测特征的详细信息
✅ 适应铅笔痕迹大小、形状和位置的变化
关键要点
Segmentation vs. Classification:
- Segmentation 在图像中发现并测量特征
- Classification 识别整个对象或总体条件
- 将分割用于缺陷检测、污染分析或覆盖度测量
培训最佳实践:
- 高质量的标注比数量更重要
- 在训练集中包含多样化的示例
- 使用生产样本进行彻底测试
- 根据需要进行监控和重新训练
通过/不通过逻辑:
- 从简单标准开始,按需要增加复杂性
- 用边缘情况和临界样本测试逻辑
- 为保持一致性,将标准进行文档化
- 考虑多因素以实现稳健的决策
下一步
现在您已完成第一个分割模型:
- 应用到其他用例 - 尝试检测不同类型的缺陷或特征
- 与生产系统集成 - 连接到 PLCs 或质量管理系统
- 设置数据收集 - 跟踪性能指标和检测统计
- 培训操作员 - 确保团队了解如何监控和维护系统
- 计划维护 - 安排定期模型更新和性能评审